#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>


// 信号处理函数
void do_sig_child(int sig) {
    printf("receive signal <%s> \n", strsignal(sig));
    wait(NULL);// 不会阻塞会立即释放资源
}

int main(int argc, char const *argv[])
{
    pid_t pid;
    sig_t sigret;
    // SIGCHLD 默认处理方式是忽略的
    sigret = signal(SIGCHLD, do_sig_child);
    pid = fork();
    if (pid == 0) {
        printf("child process pid: %d\n", getpid());
        sleep(2);
        exit(EXIT_SUCCESS); //子进程退出会主动给父进程发送SIGCHLD信号
    } else if (pid > 0) {
        while(1) {

        }
    }
    return 0;
}
